<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="./axios.js"></script>
    <script>
        // promise是es6提出的一种异步编程的解决方案
        // promise的实现（原理）promise本质上是一个构造函数 它接收一个函数作为参数 该函数接收两个参数 分别是resolve和reject 他们也是函数
        // promise 在实例的时候会产生一个状态 state 他的初始值是pending(进行中) 当我们调用了resolve函数后 promise的状态会立即从进行中的状态转化为成功的状态
        // 成功的状态是（fullfilled） 当我们调用 reject函数时 promise会立即从进行中的状态转化为失败的状态（rejected）
        // 而promise不管是成功还是失败 都表示promise执行结束了 我们可以通过then法获取promise执行的结果 也可以通过catch来获取执行失败的错误信息
        // then和catch本质上都是promise原型上的方法
        // then方法有两个参数 第一个是promise执行resolve传递出来的数据 第二参数是执行reject方法传递出来的数据
        // catch只能获取reject方法传递出来数据
        // setTimeout setInterval ajax 各种事件（鼠标事件 键盘事件 表单事件等等）
        // var num = 0
        // let promise = new Promise(function(resolve, reject) {
        //     setTimeout(() => {
        //         num = 1
        //         resolve(num)
        //             // reject(num)
        //     }, 1000);
        // })

        // promise.then((data) => {
        //     // console.log(data);
        // }, err => {
        //     console.log(err);
        // })
        // promise.catch(err => {
        //     console.log(err);
        // })
        // ---------------------------------------------------------
        // var num = 1

        // function setNum(fn) {
        //     setTimeout(() => {
        //         num = 2
        //         fn(num)
        //     }, 1000);
        // }

        // console.log(num);

        // setNum(function(data) {
        //     console.log(data);
        // })

        // class MyPromise {

        // }

        // let obj = {
        //     name: '张三'
        // }
        // let promise = new MyPromise((resolve, reject) => {
        //     setTimeout(() => {
        //         obj.name = '李四'
        //         resolve(obj)
        //     }, 1000)
        // })

        // let promise = new Promise((resolve, reject) => {

        // })
        // console.log(promise);
        // let obj = {};
        // axios.get('https://cnodejs.org/api/v1/topics').then(res => {
        //     // console.log(res);
        //     obj = res
        // })

        // function show() {
        //     console.log(obj);
        // }
        // show()
        function promise() {
            return new Promise((resolve, rejcet) => {
                axios.get('https://cnodejs.org/api/v1/topics').then(res => {
                    resolve(res)
                        // if(status !== 200) {
                        //     rejcet(res)
                        // }
                })
            })
        }

        promise().then(res => {
            console.log(res);
        }).catch(err => {
            console.log(err);
        })
    </script>
</body>

</html>